package ConcorrenciaOptimista;

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;


import JDBC.Constants;
import JDBC.DBConnection;

public class BilhetesEventosPessimista {

	private DBConnection dbConection;
	private CtlConcorrenciaPessimista ctlConcorrencia;


	private Map<String, EventoPessimista> eventosPorNome = new HashMap<String, EventoPessimista>();

	private JFrame frame;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					BilhetesEventosPessimista window = new BilhetesEventosPessimista();
					window.frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public BilhetesEventosPessimista() {
		ctlConcorrencia = new CtlConcorrenciaPessimista();
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */

	private void initialize() {
		frame = new JFrame();
		frame.setResizable(false);
		frame.setBounds(100, 100, 366, 347);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().setLayout(null);

		JLabel lblEvento = new JLabel("Evento:");
		lblEvento.setBounds(31, 32, 46, 14);
		frame.getContentPane().add(lblEvento);


		final JLabel lblDia = new JLabel("Dia:"/*+ctlConcorrencia.getDataEnvento(idEvento)*/);
		lblDia.setBounds(31, 85, 95, 14);
		frame.getContentPane().add(lblDia);

		final JLabel lblHora = new JLabel("Hora:"/*+ctlConcorrencia.getHoraEnvento(idEvento)*/);
		lblHora.setBounds(149, 85, 88, 14);
		frame.getContentPane().add(lblHora);

		JLabel lblEscolha_o_lugar = new JLabel("Escolha o lugar");
		lblEscolha_o_lugar.setBounds(31, 155, 72, 14);
		frame.getContentPane().add(lblEscolha_o_lugar);


		final DefaultComboBoxModel tiposModel1 = new DefaultComboBoxModel();
		//eventos
		DefaultComboBoxModel tiposModel = new DefaultComboBoxModel();
		final JComboBox comboBoxEvento = new JComboBox(tiposModel);
		comboBoxEvento.setBounds(113, 29, 227, 20);

		tiposModel.insertElementAt("", 0);
		for(EventoPessimista evento : ctlConcorrencia.obterEventos()) {
			eventosPorNome.put(evento.getNomeEvento(), evento);
			tiposModel.addElement(evento.getNomeEvento());
		}

		frame.getContentPane().add(comboBoxEvento);

		comboBoxEvento.addItemListener(new ItemListener() {
			@Override
			public void itemStateChanged(ItemEvent e) {
				tiposModel1.setSelectedItem("");
				if(!e.getItem().equals("") && comboBoxEvento.getSelectedItem().toString().toCharArray().length != 0) {
					lblDia.setText(eventosPorNome.get((String) comboBoxEvento.getSelectedItem()).getDataString());
					lblHora.setText(eventosPorNome.get((String) comboBoxEvento.getSelectedItem()).getHoraString());

					//				lugar
					tiposModel1.removeAllElements();
					tiposModel1.insertElementAt("",0);
					for(String lugar : ctlConcorrencia.obterLugaresEvento((Integer) eventosPorNome.get((String) comboBoxEvento.getSelectedItem()).getIdEvento())) {
						tiposModel1.addElement(lugar);
						System.out.println("added lugar: " + lugar);
					}

				}
			}});
		//numeroLugar

		final JComboBox comboBoxNumeroLugar = new JComboBox(tiposModel1);
		comboBoxNumeroLugar.setBounds(113, 152, 227, 20);
		tiposModel1.insertElementAt("", 0);
		comboBoxNumeroLugar.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				if((String) comboBoxNumeroLugar.getSelectedItem() != null)
					System.out.println("action : " + (String) comboBoxNumeroLugar.getSelectedItem() + " size: " + comboBoxNumeroLugar.getSelectedItem().toString().toCharArray().length);

				if(comboBoxNumeroLugar.getSelectedItem() != null && comboBoxNumeroLugar.getSelectedItem().toString().length() != 0) {
					//					ctlConcorrencia.rollbackCurrentTransaction();
					ctlConcorrencia.trancarLugar((Integer)eventosPorNome.get((String) comboBoxEvento.getSelectedItem()).getIdEvento(), (String) comboBoxNumeroLugar.getSelectedItem());
				}
			}
		}
		);

		comboBoxNumeroLugar.addPopupMenuListener(new PopupMenuListener() {

			@Override
			public void popupMenuWillBecomeVisible(PopupMenuEvent arg0) {
				// TODO Auto-generated method stub
				tiposModel1.removeAllElements();
				tiposModel1.insertElementAt("",0);
				for(String lugar : ctlConcorrencia.obterLugaresEvento((Integer) eventosPorNome.get((String) comboBoxEvento.getSelectedItem()).getIdEvento())) {
					tiposModel1.addElement(lugar);
				}
			}

			@Override
			public void popupMenuWillBecomeInvisible(PopupMenuEvent arg0) {
				// TODO Auto-generated method stub

			}

			@Override
			public void popupMenuCanceled(PopupMenuEvent arg0) {
				// TODO Auto-generated method stub

			}
		});

		frame.getContentPane().add(comboBoxNumeroLugar);

		JButton btnConfirmar = new JButton("Confirmar");
		btnConfirmar.setBounds(251, 236, 89, 23);
		frame.getContentPane().add(btnConfirmar);

		btnConfirmar.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				ctlConcorrencia.reservarLugarEvento(eventosPorNome.get((String) comboBoxEvento.getSelectedItem()).getIdEvento(), (String) comboBoxNumeroLugar.getSelectedItem());
				JOptionPane.showMessageDialog(frame, "O Bilhete foi reservado com sucesso!");
				tiposModel1.setSelectedItem("");

			}
		});
		JButton btnCancelar = new JButton("Cancelar");
		btnCancelar.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				ctlConcorrencia.rollbackCurrentTransaction();
				JOptionPane.showMessageDialog(frame, "Rollback efectuado! Cadeado liberto!");


			}
		});
		btnCancelar.setBounds(31, 236, 89, 23);
		frame.getContentPane().add(btnCancelar);
	}




}



